﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domain.BLL;
using System.Data.Entity;

namespace Domain.DAL
{
    public class ShoppingCartDAL
    {
        CSEntities cs = new CSEntities();
               
        public static void getCartItem(ShoppingCartBLL ShoppingCart)
        {
            using( var cs = new CSEntities())
            {
                var cartItem = cs.Carts.SingleOrDefault(
                    c => c.CartID == ShoppingCart.CartID                   
                );

                if (cartItem == null)
                {
                    ShoppingCart = null;
                }
                else 
                {
                    ShoppingCart.ID = cartItem.ID;
                    ShoppingCart.CartID = cartItem.CartID;
                    ShoppingCart.ProductID = cartItem.ProductID;
                    ShoppingCart.Count = cartItem.Count;
                    ShoppingCart.DateCreated = cartItem.DateCreated;
                   
                }
            };

        }

        public static void addNewItemToCart(ShoppingCartBLL shoppingCartBLL)
        {
            using (var cs = new CSEntities())
            {
                var item = cs.Carts.SingleOrDefault(
                    c => c.CartID == shoppingCartBLL.CartID
                            && c.ProductID == shoppingCartBLL.ProductID
                );

                if (item == null)
                {
                    item = new Cart
                    {

                        CartID = shoppingCartBLL.CartID,
                        ProductID = shoppingCartBLL.ProductID,
                        Count = shoppingCartBLL.Count,
                        DateCreated = null,
                    };

                    cs.Carts.AddObject(item);
                    //cs.AddToCarts(item);
                    //cs.SaveChanges();
                }
                else
                {
                    item.Count++;
                    
                }

                cs.SaveChanges();
                
            }


        }



        internal static int? removeItemFromCart(ShoppingCartBLL shoppingCartBLL)
        {
            using (var cs = new CSEntities())
            {
                //Lấy ra một sản phẩm tương ứng trong giỏ hàng hiện tại
                var item = cs.Carts.Single(
                    c => c.CartID == shoppingCartBLL.CartID
                            && c.ID == shoppingCartBLL.ID);

                //Biến xác định số lượng
                int? itemCount = 0;

                //Nếu tìm thấy sp đó trong giỏ hàng
                if (item != null)
                {
                    //Nếu số lượng sp đó lớn hơn 1, thì giảm số lượng của nó đi 1
                    if (item.Count > 1)
                    {
                        item.Count--;
                        itemCount = item.Count;
                    }

                    //Nếu số lượng của nó bằng 1, thì xóa nó khỏi giỏ hàng
                    else
                    {
                        cs.Carts.DeleteObject(item);
                    }
                }                

                cs.SaveChanges();
                return itemCount;

            }
        }

        internal static void emptyCart(ShoppingCartBLL shoppingCartBLL)
        {
            using (var cs = new CSEntities())
            {
                //Lấy ra danh sách các sp của cart hiện tại
                var items = cs.Carts.Where(
                        c => c.CartID == shoppingCartBLL.CartID);

                //lần lượt xóa tất cả các sp thuộc cart hiện tại
                foreach (var item in items)
                {
                    cs.Carts.DeleteObject(item);
                }

                cs.SaveChanges();
            }
        }

        internal static List<ShoppingCartBLL> getCartItems(ShoppingCartBLL shoppingCartBLL)
        {
            using (var cs = new CSEntities())
            {
                var items = (from i in cs.Carts
                             where i.CartID == shoppingCartBLL.CartID
                             select new ShoppingCartBLL
                             {
                                 ID = i.ID,
                                 CartID = i.CartID,
                                 ProductID = i.ProductID,
                                 Count = i.Count,
                                 DateCreated = i.DateCreated,
                             }).ToList();
                return items;
            }
        }

        internal static int? getCount(ShoppingCartBLL shoppingCartBLL)
        {
            //Đếm tất cả sp có trong giỏ hàng
            return 0;
        }

        internal static int? getTotal(ShoppingCartBLL shoppingCartBLL)
        {
            using (var cs = new CSEntities())
            {
                int? total = (int?)(from i in cs.Carts
                              where i.CartID == shoppingCartBLL.CartID
                              select (int?)i.Count *
                              i.Product.SalePrice).Sum();
                return total;
            }
        }
    }
}
